package com.marvels.product.productmanage.service;

import java.util.List;
import java.util.Map;

import org.springframework.web.bind.annotation.RequestBody;

import com.marvels.common.exception.MarvelsBusinessException;
import com.marvels.product.param.dto.McptProduct;
import com.marvels.product.productmanage.dto.McptChannelDto;
import com.marvels.product.productmanage.dto.McptProductDto;
import com.marvels.product.productmanage.dto.McptProductFundRelationDto;
import com.marvels.product.productmanage.dto.McptProductMappedDto;
import com.marvels.product.productmanage.dto.McptProductTypeChannelDto;
import com.marvels.product.productmanage.dto.McptProductTypeDto;
import com.marvels.product.productmanage.dto.McptProductTypeTermDto;
import com.marvels.product.productmanage.dto.McptProductVersionDto;
import com.marvels.product.productmanage.dto.OrganizationInfoDTO;
import com.marvels.product.productmanage.dto.ProductRequestDTO;



public interface ProductTypeService{
	/**
	 * 查询产品类型
	 * @return
	 */
	public McptProductTypeDto getProduct(Long id);
	/**
	 * 查询所有下拉框的值
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public Map<String,Object> getAllSelector() throws MarvelsBusinessException;
	
	/**查询产品大类
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public List<McptProductTypeDto> queryProduct(McptProductTypeDto mcptProductTypeDto) throws MarvelsBusinessException;
	
	/**获取小类版本
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductVersionDto
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public List<Map<String,Object>> queryVersion(McptProductVersionDto mcptProductVersionDto) throws MarvelsBusinessException;
	
	/**
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param map
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public Integer queryCountProduct(Map<String,Object> map) throws MarvelsBusinessException;
	
	/**停用或者启用版本
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductVersionDto
	 * @throws MarvelsBusinessException
	 */
	public void productUpdate(McptProductVersionDto mcptProductVersionDto) throws MarvelsBusinessException;
	
	/**删除产品大类
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductVersionDto
	 * @throws MarvelsBusinessException
	 */
	public void productDelete(McptProductVersionDto mcptProductVersionDto) throws MarvelsBusinessException;
	
	/**添加产品大类
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 * @throws MarvelsBusinessException
	 */
	public void productInsert(McptProductTypeDto mcptProductTypeDto) throws MarvelsBusinessException;
	
	/**查询所有的渠道
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public List<McptChannelDto> queryChannel(McptProductTypeDto mcptProductTypeDto) throws MarvelsBusinessException;
	
	/**查询产品大类所有的渠道
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public List<McptProductTypeChannelDto> queryChannelByProductCode(McptProductTypeDto mcptProductTypeDto) throws MarvelsBusinessException; 
	
	
	/**
	 * 根据渠道code查询对应产品大类
	 * @param dto
	 * @return
	 */
	public List<McptProductTypeChannelDto> selectByChannelCode(McptProductTypeChannelDto dto) throws MarvelsBusinessException;
	
	/**查询产品大类所有的期限
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public List<McptProductTypeTermDto> queryTermByProductCode(McptProductTypeDto mcptProductTypeDto) throws MarvelsBusinessException; 
	
	/**产品大类编辑提交
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 * @throws MarvelsBusinessException
	 */
	public void editConfirm(McptProductTypeDto mcptProductTypeDto) throws MarvelsBusinessException;
	
	/**生成版本和产品小类
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 * @throws MarvelsBusinessException
	 */
	public void generateVersion(McptProductTypeDto mcptProductTypeDto) throws MarvelsBusinessException;
	
	/**获取产品大类对应的所有版本号
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public List<McptProductTypeDto> queryProductVersion(McptProductTypeDto mcptProductTypeDto) throws MarvelsBusinessException;
	
	/**根据版本号查询所有产品小类
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public List<McptProduct> queryByVersion(McptProductTypeDto mcptProductTypeDto) throws MarvelsBusinessException;
	
	/**新增产品映射资金源
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductFundRelationDto
	 * @throws MarvelsBusinessException
	 */
	public void saveProductFund(McptProductFundRelationDto mcptProductFundRelationDto) throws MarvelsBusinessException;
	
	/**查询产品映射资金源
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductFundRelationDto
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public List<McptProductFundRelationDto> queryProductMappingFund(McptProductFundRelationDto mcptProductFundRelationDto) throws MarvelsBusinessException;
	
	/**删除产品映射资金源
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductFundRelationDto
	 * @throws MarvelsBusinessException
	 */
	public List<McptProductFundRelationDto> removeProductMappingFundById(McptProductFundRelationDto mcptProductFundRelationDto) throws MarvelsBusinessException;
	
	/**修改产品映射资金源
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductFundRelationDto
	 * @throws MarvelsBusinessException
	 */
	public void updateProductMappingFundById(McptProductFundRelationDto mcptProductFundRelationDto) throws MarvelsBusinessException;
	
	
	/**新增产品映射渠道
	 * @author 娄凯琦
	 * @date 2018年4月16日  
	 * @param mcptProductFundRelationDto
	 * @throws MarvelsBusinessException
	 */
	public void addproductMappedChannel(McptProductMappedDto mcptProductMappedDto) throws MarvelsBusinessException;
	
	
	/**查询产品映射渠道
	 * @author 娄凯琦
	 * @date 2018年4月16日  
	 * @param mcptProductMappedDto
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public List<McptProductMappedDto> searchProductMapped(McptProductMappedDto mcptProductMappedDto) throws MarvelsBusinessException;
	
	
	
	/**增删改产品映射渠道
	 * @author 娄凯琦
	 * @date 2018年4月16日  
	 * @param mcptProductMappedDto
	 * @throws MarvelsBusinessException
	 */
	public void modifyProductMappedChannel(McptProductMappedDto mcptProductMappedDto) throws MarvelsBusinessException;
	
	
	/**根据小类code查询利率
	 * @author 娄凯琦
	 * @date 2018年5月9日  
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public List<McptProductFundRelationDto> getRateByProductCode(McptProduct dto) throws MarvelsBusinessException;
	/**
	 * 获取产品参数映射下拉列表
	 * @param mcptProductMappedDto
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public Map<String,Object> findProductMappedSelector(McptProductMappedDto mcptProductMappedDto) throws MarvelsBusinessException;
	/**
	 * 获取渠道一、渠道二、团队信息
	 * @param orgDto
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public List<OrganizationInfoDTO> findOrgInfoList(OrganizationInfoDTO orgDto) throws MarvelsBusinessException;
	
	/**查询云展业产品
	 * @param reqParam
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public List<McptProductTypeDto> productOffLine( ProductRequestDTO reqParam)  throws MarvelsBusinessException;
	
	/**查询云科贷产品
	 * @param reqParam
	 * @return
	 * @throws MarvelsBusinessException
	 */
	// public List<McptProductTypeDto> productOnLine( ProductRequestDTO reqParam)  throws MarvelsBusinessException;

	/**
	 * 查询线上产品（只取一个）
	 * 
	 * @param mcptProducTypeDto
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public McptProductTypeDto queryOnlineProduct(McptProductTypeDto mcptProducTypeDto) throws MarvelsBusinessException;

	/**
	 * 获取首页信息
	 * 
	 * @param reqMap
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public Map<String, Object> getHomeInfo() throws MarvelsBusinessException;
	
	/**
	 * 查询产品资讯费率
	 * @param productType
	 * @return
	 */
	public Map<String, Object> queryByConsultingFeeCode(McptProductDto dto);
	
	/**
	 * 默认查询一条产品信息
	 * @param productType
	 * @return
	 */
	public McptProduct queryProductByProductType(String productType);
}
